package middleware

import (
	"strconv"

	"github.com/gin-gonic/gin"
)

// PaginationParams 分页参数
type PaginationParams struct {
	Page     int `json:"page"`
	PageSize int `json:"pageSize"`
}

// Pagination 分页中间件
func Pagination() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 获取分页参数
		pageStr := c.DefaultQuery("page", "1")
		pageSizeStr := c.DefaultQuery("pageSize", "10")

		page, _ := strconv.Atoi(pageStr)
		pageSize, _ := strconv.Atoi(pageSizeStr)

		if page < 1 {
			page = 1
		}
		if pageSize < 1 {
			pageSize = 10
		}

		// 将分页参数保存到上下文中
		c.Set("pagination", &PaginationParams{
			Page:     page,
			PageSize: pageSize,
		})

		c.Next()
	}
}
